<template>
  <page-header-wrapper>
    <a-card class="table-card">
      <JeepaySearchForm :searchFunc="searchFunc" :resetFunc="resetFunc">
        <a-form-item label="" class="table-search-item">
          <JeepayDateRangePicker
            v-if="vdata.showDateTimeRage"
            ref="dateRangePicker"
            v-model:value="vdata.searchData['queryDateRange']"
            customDateRangeType="date"
          />
        </a-form-item>
        <JeepaySearchInfoInput
          v-if="$access('ENT_STATISTIC_MCH')"
          v-model:value="vdata.searchData.mchNo"
          placeholder="商户号"
          :textUpStyle="true"
          :mchNoAndName="true"
          showType="MCH"
        />
        <jeepay-text-up v-if="$access('ENT_STATISTIC_MCH')" v-model:value="vdata.searchData['mchName']" :placeholder="'商户名称'" />
        <jeepay-text-up v-if="$access('ENT_STATISTIC_AGENT')" v-model:value="vdata.searchData['agentNo']" :placeholder="'代理商号'" />
        <jeepay-text-up v-if="$access('ENT_STATISTIC_ISV')" v-model:value="vdata.searchData['isvNo']" :placeholder="'服务商号'" />
      </JeepaySearchForm>

      <!-- 列表渲染 -->
      <JeepayTable
        ref="infoTable"
        :init-data="false"
        :req-table-data-func="reqTableDataFunc"
        :table-columns="tableColumns"
        :statisticsIsShow="true"
        :search-data="vdata.searchData"
        row-key="mchNo"
        :tableExportFunc="tableExportFunc"
        @btnLoadClose="btnLoading = false"
        @handleTableChange="handleChange"
      >
        <template #headerCell="{ column }">
          <span v-if="column.tooltipTitle">
            {{ column.title }}
            <a-tooltip :title="column.tooltipTitle"><info-circle-outlined /></a-tooltip>
          </span>
        </template>
        <template #topBtnSlot>
          <a-button type="primary" @click="tableExportFunc">
            <plus-outlined />导出表格
          </a-button>
        </template>
        <template #statistics>
          <div class="statistics-list">
            <div v-for="(item, index) in count" :key="index" class="item">
              <div v-if="item.type == 'line'" class="line" />
              <div class="title">{{ item.title }}</div>
              <div v-if="item.title" class="amount" :style="{ color: item.textColor }">
                <span class="amount-num">{{ item.content }}</span>
              </div>
            </div>
          </div>
        </template>
        <template #bodyCell="{ column, record }">
          <template v-if="column.key === 'allAmount'">
            <b style="color: #15B86C;">￥{{ record.allAmount / 100 }}</b>
          </template>
          <template v-if="column.key === 'payAmount'">
            <b style="color: #15B86C;">￥{{ record.payAmount / 100 }}</b>
          </template>
          <template v-if="column.key === 'fee'">
            <b style="color: #FF6848;">￥{{ record.fee / 100 }}</b>
          </template>
          <template v-if="column.key === 'refundFee'">
            <b style="color: #15B86C;">￥{{ record.refundFee / 100 }}</b>
          </template>
          <template v-if="column.key === 'refundAmount'">
            <b style="color: #FF6848;">￥{{ record.refundAmount / 100 }}</b>
          </template>
          <template v-if="column.key === 'refundCount'">
            <b style="color: #FF6848;">{{ record.refundCount }}</b>
          </template>
          <template v-if="column.key === 'payCount'">
            <b style="color: #15B86C;">{{ record.payCount }}/{{ record.allCount }}</b>
          </template>
          <template v-if="column.key === 'round'">
            <b style="color: #FF8800;">{{ record.round }}%</b>
          </template>
          <template v-if="column.key === 'operation'">
            <JeepayTableColumns>
              <a-button type="link" @click="detailFunc(record.mchNo, vdata.parameterDate)">明细</a-button>
            </JeepayTableColumns>
          </template>
        </template>
      </JeepayTable>
    </a-card>
    <!-- 明细页面组件  -->
    <billDetail ref="accountDetail" :callback-func="searchFunc" />
  </page-header-wrapper>
</template>
<script setup lang="ts">

import { API_URL_STATISTIC, req, $exportExcel, exportExcelUrl } from '@/api/manage'
import { ref, reactive, onMounted, watch, getCurrentInstance } from 'vue'
import { useRoute } from 'vue-router'
import billDetail from './accountDetail.vue'
import fileDownload from 'js-file-download'
import dateUtil from '@/utils/dateUtil.js'
const { $infoBox, $access, $hasAgentEnt } = getCurrentInstance()!.appContext.config.globalProperties

const accountDetail = ref()
const infoTable = ref()
let tableColumns = reactive([
  { key: 'mchName', title: '商户名称', dataIndex: 'mchName' },
  { key: 'mchNo', title: '商户号', dataIndex: 'mchNo'},
  { key: 'allAmount', title: '成交金额', tooltipTitle: '支付成功的订单金额，包含部分退款及全额退款的订单', dataIndex: 'allAmount'},
  { key: 'payAmount', title: '实收金额', tooltipTitle: '扣除手续费后的实际到账金额', dataIndex: 'payAmount'},
  { key: 'fee', title: '手续费', tooltipTitle: '成交订单产生的手续费金额', dataIndex: 'fee'},
  { key: 'refundAmount', title: '退款金额', dataIndex: 'refundAmount'},
  { key: 'refundFee', title: '手续费回退', tooltipTitle: '退款订单产生的手续费退费金额', dataIndex: 'refundFee'},
  { key: 'refundCount', title: '退款笔数', tooltipTitle: '实际退款订单笔数，若一笔已成交订单退款多次，则计多次', dataIndex: 'refundCount'},
  { key: 'payCount', title: '成交/总笔数', dataIndex: 'payCount' },
  { key: 'round', title: '成功率', tooltipTitle: '成交笔数与总订单笔数除得的百分比', dataIndex: 'round'},
  { key: 'operation', title: '操作', fixed: 'right', align: 'center' }
])

let btnLoading = ref(false)
let count: any = ref([]) // 数据统计数组
const dateRangePicker = ref()
const vdata: any = reactive({
  searchData: { method: 'mch', queryDateRange: 'today', sortField: 'payAmount', sortOrder: 'descend' },
  showDateTimeRage: false, //是否显示时间搜索组件
  parameterDate: 'today'
})

vdata.searchData['agentNo'] = useRoute().query.agentNo
vdata.searchData['isvNo'] = useRoute().query.isvNo
onMounted(() => {
  if (useRoute().query.queryDate) {
    vdata.searchData['queryDateRange'] = dateUtil.parseQueryStringByRange(useRoute().query.queryDate)
  } else if (useRoute().query.queryDateRange) {
    let date = useRoute().query.queryDateRange as any
    if (date == 7) {
      date = 'near2now_7'
    } else if (date == 30) {
      date = 'near2now_30'
    } else if (date.indexOf('_') > -1) {
      date = dateUtil.parseQueryStringByRange(date)
    }
    vdata.searchData['queryDateRange'] = date
  }
  searchFunc()
  vdata.showDateTimeRage = true
})

function handleChange(sorter) {
  vdata.searchData['sortField'] = sorter.columnKey
  vdata.searchData['sortOrder'] = sorter.order
}

function resetFunc() {
  dateRangePicker.value.returnSelectModel()
  vdata.searchData = { method: 'mch', queryDateRange: 'today', sortField: 'payAmount', sortOrder: 'descend' }
}

// 请求table接口数据
function reqTableDataFunc(params: any) {
  params.method = 'mch'
  if (!params.sortField) {
    params.sortField = 'payAmount'
    params.sortOrder = 'descend'
  }
  reqTableCountFunc(params)
  return req.list(API_URL_STATISTIC, params)
}

// 请求table接口数据
function reqTableCountFunc(params: any) {
  req.list(API_URL_STATISTIC + '/total', params).then(res => {
    count.value = [
      { title: '总成交金额', symbol: 'add', textColor: '#1A66FF', content: ((res.allAmount) / 100).toFixed(2) },
      { type: 'line' },
      { title: '总成交笔数', content: (res.payCount) },
      { type: 'line' },
      { title: '总退款金额', symbol: 'sub', content: ((res.refundAmount) / 100).toFixed(2) },
      { type: 'line' },
      { title: '总退款笔数', content: (res.refundCount) },
      { type: 'line' },
      { title: '支付成功率', content: (res.round) + '%' },
    ]
  })
}

function searchFunc() { // 点击【查询】按钮点击事件
  vdata.parameterDate = vdata.searchData.queryDateRange
  infoTable.value.refTable(true)
}

function detailFunc(recordId, date) {
  accountDetail.value.show(recordId, date)
}

function tableExportFunc() {
  return $exportExcel(exportExcelUrl.statistic, Object.assign({}, vdata.searchData, {})).then(res => {
    fileDownload(res.data, '商户统计.xlsx')
  }).catch((error) => { console.log(error) })
}


//   function infoTableSelectChangeFunc(selectedRowKeys){
//   // 遍历 vdata.listRecords 如果selectedRowKeys数组中存在对应的id,则将其checked改为true,反之false
//   vdata.listRecords.forEach(element => {
//     selectedRowKeys.includes(element.qrcId) ? element.checked = true : element.checked = false
//   })
// }

</script>
